// 知识点1：我们希望对算法进行更多参数的操作，衍生出lambda表达式，一个lambda表达式表示一个可调用代码单元，它可以定义在函数的内部。表达式的形式：f
// = [捕获列表](参数列表){函数体}，参数列表为空时，()可省略。
// 知识点2：如果未指定返回内容，则lambda返回void。

// 知识点3：lambda只有在捕获列表中捕获一个它所在函数的局部变量才能在函数体中使用该变量，lambda可以直接使用定义在函数之外的名字或者局部static变量

// 首先练习一下将上一题改成使用lambda表达式
#include <algorithm>
#include <iostream>
#include <numeric>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char **argv) {
  string a[10] = {"diuwudh", "udh",  "diudh",       "wudh", "diuwu",
                  "h",       "diuw", "diuwudhg257", "h",    "d"};
  vector<string> vec1(a, a + 10); //利用数组初始化vector
  vector<string>::iterator it1 = vec1.begin();
  vector<string>::iterator it2;
  //排序,其中也可以使用lambda表达式
  it2 = partition(vec1.begin(), vec1.end(),
                  [](const string &a) { return a.size() > 5; });
  cout << "排序后的vector中大于5的元素:";
  for (; it1 != it2; ++it1) {
    cout << *it1 << " ";
  }
  return 0;
}